package cn.taichoo.server.service.impl;

import java.time.LocalDateTime;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.web.domain.TPage;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.domain.dto.pack.PackTripartiteSettingDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import cn.taichoo.server.mapper.PackTripartiteSettingMapper;
import cn.taichoo.server.domain.PackTripartiteSetting;
import cn.taichoo.server.service.IPackTripartiteSettingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.common.security.utils.SecurityUtils;

import javax.annotation.Resource;

/**
 * 手机打包业务-第三方配置模块参数设置Service业务层处理
 *
 * @author Wuzh
 * @date 2025-03-17
 */
@Service
@Slf4j
public class PackTripartiteSettingServiceImpl extends ServiceImpl<PackTripartiteSettingMapper, PackTripartiteSetting> implements IPackTripartiteSettingService {

    @Resource
    private PackTripartiteSettingMapper packTripartiteSettingMapper;

    /**
     * 查询手机打包业务-第三方配置模块参数设置
     *
     * @param id 手机打包业务-第三方配置模块参数设置主键
     * @return 手机打包业务-第三方配置模块参数设置
     */
    @Override
    public PackTripartiteSetting selectPackTripartiteSettingById(Long id) {
        return packTripartiteSettingMapper.selectPackTripartiteSettingById(id);
    }

    @Override
    public PackTripartiteSetting selectPackTripartiteSetting(PackTripartiteSetting packTripartiteSetting) {
        LambdaQueryWrapper<PackTripartiteSetting> queryWrapper = new LambdaQueryWrapper<>();
        if (packTripartiteSetting.getAppBaseId() != null) {
            queryWrapper.eq(PackTripartiteSetting::getAppBaseId, packTripartiteSetting.getAppBaseId());
        }
        if (packTripartiteSetting.getConfigType() != null) {
            queryWrapper.eq(PackTripartiteSetting::getConfigType, packTripartiteSetting.getConfigType());
        }
        if (packTripartiteSetting.getConfigItem() != null) {
            queryWrapper.eq(PackTripartiteSetting::getConfigItem, packTripartiteSetting.getConfigItem());
        }
        PackTripartiteSetting one = this.getOne(queryWrapper);
        return one;
    }

    /**
     * 查询手机打包业务-第三方配置模块参数设置列表
     *
     * @param packTripartiteSetting 手机打包业务-第三方配置模块参数设置
     * @return 手机打包业务-第三方配置模块参数设置
     */
    @Override
    public AjaxResult selectPackTripartiteSettingList(PackTripartiteSetting packTripartiteSetting) {
        List<PackTripartiteSetting> packTripartiteSettings = packTripartiteSettingMapper.selectPackTripartiteSettingList(packTripartiteSetting);
        Integer integer = packTripartiteSettingMapper.selectPackTripartiteSettingCount(packTripartiteSetting);
        TPage page = new TPage();
        page.setRecords(packTripartiteSettings);
        page.setTotal(integer);
        return AjaxResult.success(page);
    }

    /**
     * 新增手机打包业务-第三方配置模块参数设置
     *
     * @param packTripartiteSetting 手机打包业务-第三方配置模块参数设置
     * @return 结果
     */
    @Override
    public AjaxResult insertPackTripartiteSetting(PackTripartiteSetting packTripartiteSetting) {
        //1.解析各种参数
        PackTripartiteSettingDto packTripartiteSettingDto = packTripartiteSetting.getPackTripartiteSettingDto();
        if (packTripartiteSetting.getConfigType() == 1 && packTripartiteSetting.getConfigItem() == 1) {
            //分享配置的微博参数配置，构建JSON入库
            // 创建一个Gson构造器，设置序列化空值为false
        }
        String string = JSONObject.toJSONString(packTripartiteSettingDto);
        log.info("转JSON对象->{}", string);
        packTripartiteSetting.setParamsInfoJson(string);

        packTripartiteSetting.setCreateBy(SecurityUtils.getUserId());
        boolean save = this.save(packTripartiteSetting);
        if (!save) {
            log.error("{}-新增{}失败！", LocalDateTime.now(), packTripartiteSetting.getId());
            throw new RuntimeException("插入失败！");
        }
        return AjaxResult.success();
    }

    /**
     * 修改手机打包业务-第三方配置模块参数设置
     *
     * @param packTripartiteSetting 手机打包业务-第三方配置模块参数设置
     * @return 结果
     */
    @Override
    public AjaxResult updatePackTripartiteSettingById(PackTripartiteSetting packTripartiteSetting) {
        boolean b = this.updateById(packTripartiteSetting);
        if (!b) {
            log.error("{}-修改{}失败！", LocalDateTime.now(), packTripartiteSetting.getId());
            throw new RuntimeException("修改失败！");
        }
        return AjaxResult.success();
    }

    /**
     * 删除手机打包业务-第三方配置模块参数设置
     *
     * @param id 手机打包业务-第三方配置模块参数设置
     * @return 结果
     */
    @Override
    public AjaxResult deletePackTripartiteSettingById(Long id) {
        boolean update = this.update(new LambdaUpdateWrapper<PackTripartiteSetting>().
                set(PackTripartiteSetting::getDeleted, 1).
                eq(PackTripartiteSetting::getId, id));
        if (!update) {
            log.error("{}-删除{}-{}失败！", LocalDateTime.now(), id);
            throw new RuntimeException("删除失败！");
        }
        return AjaxResult.success();
    }

}
